<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.6" />
<title>Release notes for Gerrit 2.1.1, 2.1.1.1</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

pre {
  padding: 0;
  margin: 0;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }


/*
 * xhtml11 specific
 *
 * */

tt {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

.monospaced {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}
</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1>Release notes for Gerrit 2.1.1, 2.1.1.1</h1>
<span id="revnumber">version 2.1.1 (from v2.7-rc2-530-g4d7ac77)</span>
<div id="toc">
  <div id="toctitle">Table of Contents</div>
  <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph"><p>Gerrit 2.1.1.1 is now available in the usual location:</p></div>
<div class="paragraph"><p><a href="http://code.google.com/p/gerrit/downloads/list">http://code.google.com/p/gerrit/downloads/list</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_schema_change">Schema Change</h2>
<div class="sectionbody">
<div class="paragraph"><p><strong>WARNING</strong> This release contains a schema change.  To upgrade:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>  java -jar gerrit.war init -d site_path</tt></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_patch_2_1_1_1">Patch 2.1.1.1</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Update MINA SSHD to SVN 897374
</p>
<div class="paragraph"><p>A deadlock was recently discovered in the SSHD, causing an
IoProcessor thread to freeze and stop servicing clients.  This
manifests itself as spotty SSH service; sometimes a connection
works, sometimes it hangs and never executes the command.  Fixed.</p></div>
</li>
<li>
<p>
issue 376    Fix deletion of comments on publish comments screen
</p>
<div class="paragraph"><p>Discarding a comment from the publish comments screen caused
a ConcurrentModificationException.  Fixed.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_new_features">New Features</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
issue 322    Update to GWT 2.0.0
</p>
<div class="paragraph"><p>JavaScript code generation is now based upon GWT 2.0, which
is the latest stable release available.  One benefit of this
is the initial JavaScript download is smaller, by omitting
less-frequently used sections of the UI like the admin screens
or user preferences.</p></div>
</li>
<li>
<p>
Support creating new users in <tt>DEVELOPMENT_BECOME_ANY_</tt>&#8230;
</p>
<div class="paragraph"><p>Developers can now create new users (to facilitate testing
scenarios) through the /become URL, rather than manually
inserting account records or switching over to OpenID/LDAP.</p></div>
</li>
<li>
<p>
issue 371    Make gitweb url links customizable, add support for c&#8230;
</p>
<div class="paragraph"><p>The linkage to gitweb is now more configurable, and we also
support linking to cgit, a popular C based alternative to the
Perl based gitweb.cgi.</p></div>
</li>
<li>
<p>
Log SSH activity to $site_path/logs/sshd_log
</p>
<div class="paragraph"><p>SSH authentication failures and commands are now logged, including
execution times, so administrators can monitor server activity.
The log file is local to the server running the daemon process,
and came about to help replace the lastUsedOn columns which were
dropped from the database (see below).</p></div>
</li>
<li>
<p>
Drop the lastUsedOn from AccountSshKeys, AccountExternalIds
</p>
</li>
<li>
<p>
Implement automatic schema upgrading
</p>
<div class="paragraph"><p>The lastUsedOn column is no longer updated in the database,
and was actually removed by a schema upgrade in this release.</p></div>
</li>
<li>
<p>
issue 162    Record submitters as the author of a merge commit
</p>
<div class="paragraph"><p>Merge commits created by Gerrit during change submission now
use the submitter&#8217;s identity as the author identity, and generic
Gerrit user identity as the committer identity.</p></div>
</li>
<li>
<p>
issue 162    Summarize single change merges with short description
</p>
<div class="paragraph"><p>The short description of a merge commit including exactly
one change into the branch now includes that change&#8217;s short
description, making the log easier to read.</p></div>
</li>
<li>
<p>
Reload GerritSiteHeader, GerritSiteFooter, GerritSite&#8230;
</p>
<div class="paragraph"><p>The site header/footer files are reloaded on the fly if they are
modified, allowing the administrator to abuse the header for a
"message of the day" feature, if desired.</p></div>
</li>
<li>
<p>
Reduce the size (and cost) of the host page
</p>
</li>
<li>
<p>
Use server side permutation selection
</p>
</li>
<li>
<p>
Allow ?s=0 to disable server side permutation
</p>
<div class="paragraph"><p>The host page was compacted slightly, and the CPU time used on
the server to send it to a client was reduced by reusing as much
work as possible between sessions.
Additionally, the host page now selects the correct JavaScript
based on the User-Agent HTTP header, removing one HTTP round
trip during initial page load, and saving ~5 KiB of transfer.</p></div>
</li>
<li>
<p>
Make hyperlinks update URL when screen is visible
</p>
<div class="paragraph"><p>The address bar now only updates when the corresponding content
is actually visible.  This matches the behavior used within
other AJAX applications like Gmail.</p></div>
</li>
<li>
<p>
Use a glass pane behind our dialogs, make most modal
</p>
<div class="paragraph"><p>Error dialogs are now more noticeable, and less easily dismissed
by an accidental click.  This is especially useful when there
is a merge error during submit.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_bug_fixes">Bug Fixes</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
issue 359    Allow updates of commits where only the parent changes
</p>
<div class="paragraph"><p>Commit replacements were sometimes rejected when the only thing
that changed as the parent pointer, e.g. rebasing a change because
the parent&#8217;s commit message was modified to correct a typo.
We now allow these replacements, with a warning to the console.</p></div>
</li>
<li>
<p>
gsql: Fix \d table missing first column
</p>
<div class="paragraph"><p>The gsql tool skipped the first column of any table, e.g. when
showing "\d accounts" the registered_on column wasn&#8217;t displayed.</p></div>
</li>
<li>
<p>
Default to the en locale
</p>
</li>
<li>
<p>
Limit permutations to only the en locale
</p>
<div class="paragraph"><p>The WAR file shrank because we deleted a large chunk of JavaScript
which was never used.  GWT created this code in case the browser
didn&#8217;t get forced into the <em>en</em> locale, but we always force it to
use the <em>en</em> locale because the top of our HTML page demands it.</p></div>
</li>
<li>
<p>
issue 364    Fix SchemaCreatorTest to work when localized errors a&#8230;
</p>
<div class="paragraph"><p>This test failed when the JVM&#8217;s default locale wasn&#8217;t en_US, as it
was testing a translated string against an English expected value.</p></div>
</li>
<li>
<p>
issue 365    Skip CommitMsgHookTest on Win32
</p>
<div class="paragraph"><p>This test failed on Windows platforms, where there is no shell
or perl available from a native Win32 application like the JVM.
For now, we skip the test.</p></div>
</li>
<li>
<p>
issue 369    Add missing repositories to build search path
</p>
<div class="paragraph"><p>The out-of-the-box build of Gerrit&#8217;s own source code didn&#8217;t work,
due to missing Maven repository URLs in our pom.xml.  I never
noticed the failure because my local repository already had the
required JARs present.</p></div>
</li>
<li>
<p>
Fix MSIE 8 compatibility
</p>
<div class="paragraph"><p>Releases between 2.0.18 and 2.1.1 have not supported MSIE 8,
due to a broken GWT upgrade.  Fixed.</p></div>
</li>
<li>
<p>
Ensure gitweb.cgi pipes are closed
</p>
<div class="paragraph"><p>Exceptions may have allowed our internal gitweb CGI invocations
to leak file descriptors, as pipes to the external CGI were not
always closed.  Fixed.</p></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_other">Other</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Switch to ClientBundle
</p>
</li>
<li>
<p>
Update to gwtexpui-1.2.0-SNAPSHOT
</p>
</li>
<li>
<p>
Merge branch <em>master</em> into gwt-2.0
</p>
</li>
<li>
<p>
Use gwt-maven&#8217;s -Dgwt.style rather than our own
</p>
</li>
<li>
<p>
Don&#8217;t build the "Story of Your Compile" report by def&#8230;
</p>
</li>
<li>
<p>
Drop the com.google.gerrit.httpd.auth.become system p&#8230;
</p>
</li>
<li>
<p>
Move all of our CSS rules into our CssResource
</p>
</li>
<li>
<p>
Start splitting our code to reduce initial download
</p>
</li>
<li>
<p>
Defer our large JavaScript parsing until later
</p>
</li>
<li>
<p>
Move prettify to be loaded as part of our patch split&#8230;
</p>
</li>
<li>
<p>
issue 363    Update Google Code Prettify to 3-Dec-2009
</p>
</li>
<li>
<p>
Start next release development
</p>
</li>
<li>
<p>
Merge branch <em>gwt-2.0</em>
</p>
</li>
<li>
<p>
documentation: Remove Eclipse user library
</p>
</li>
<li>
<p>
Fix disclosure panel CSS
</p>
</li>
<li>
<p>
Simplify pretty printer loading
</p>
</li>
<li>
<p>
Fix formatting of whitespace errors
</p>
</li>
<li>
<p>
Correct URL to apache license in CSS headers
</p>
</li>
<li>
<p>
Restore the CSS linker for GWT&#8217;s stylesheet
</p>
</li>
<li>
<p>
documentation: Correct calculation of QPS
</p>
</li>
<li>
<p>
Consolidate windows platform tests to a single class
</p>
</li>
<li>
<p>
documentation: Correct other calculations of QPS
</p>
</li>
<li>
<p>
issue 370    Revert "Defer our large JavaScript parsing until late&#8230;
</p>
</li>
<li>
<p>
Merge change If238e2bd
</p>
</li>
<li>
<p>
Remove unnecessary /login/<tt>*</tt> URLs when auth.type = LDAP
</p>
</li>
<li>
<p>
Stop using AccountExternalId lastUsedOn for most rece&#8230;
</p>
</li>
<li>
<p>
Revert "Remove unnecessary /login/* URLs when auth.ty&#8230;
</p>
</li>
<li>
<p>
Document why LoginRedirectServlet is required
</p>
</li>
<li>
<p>
Cleanup Maven build by pushing component dependencies&#8230;
</p>
</li>
<li>
<p>
Cleanup Maven build by using common plugin management
</p>
</li>
<li>
<p>
Fix package-before-copyright in GerritLauncher
</p>
</li>
<li>
<p>
Fix unified patch view
</p>
</li>
<li>
<p>
Fix background of RPC loading status message
</p>
</li>
<li>
<p>
Use @def for common CSS definitions
</p>
</li>
<li>
<p>
Correct comment panel border styles
</p>
</li>
<li>
<p>
Improve keyapplet referencing
</p>
</li>
<li>
<p>
Remove the duplicate Version class
</p>
</li>
<li>
<p>
Be specific about the Maven plugin groupId
</p>
</li>
<li>
<p>
Fix automatic formatting in SshPanel
</p>
</li>
<li>
<p>
Remove unnecessary compile scope tags
</p>
</li>
<li>
<p>
Disable unnecessary class operations
</p>
</li>
<li>
<p>
Use the full name <em>Gerrit Code Review</em> in sign-in dia&#8230;
</p>
</li>
<li>
<p>
init: Defer all prune executions until upgrade cycle &#8230;
</p>
</li>
<li>
<p>
Fix automatic formatting in LdapRealm
</p>
</li>
<li>
<p>
Update gwtorm, gwtjsonrpc, gwtexpui
</p>
</li>
<li>
<p>
Push Command.destroy down through DispatchCommand red&#8230;
</p>
</li>
<li>
<p>
Quote usernames in the sshd_log if necessary
</p>
</li>
<li>
<p>
Document why ReplicationUser doesn&#8217;t use registered g&#8230;
</p>
</li>
<li>
<p>
Configure the gwtorm KeyUtil.Encoder during module lo&#8230;
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Version 2.1.1 (from v2.7-rc2-530-g4d7ac77)<br />
Last updated 2013-10-08 10:02:12 PDT
</div>
</div>
</body>
</html>
